/**
 * 
 */
package algo3c2g15.vista;

import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

import algo3c2g15.business.Juego;
import algo3c2g15.controlador.Controlador;
import algo3c2g15.utils.Constantes;
import algo3c2g15.utils.VistaMapa;

/**
 * @author De La
 *
 */
@SuppressWarnings("serial")
public class MenuPrincipal extends JPanel{
	
	private JButton iniciarPartida = new JButton("Iniciar Partida");
	private JButton cargarPartida = new JButton("Cargar Partida");
	private JButton opciones = new JButton("Opciones");
	private JButton creditos = new JButton("Creditos");
	private JButton salir = new JButton("Salir");
	private Fondo fondo = new Fondo( Constantes.FONDO_MARRON );
	private JPanel panel = this;
	private MenuOpciones mOpciones;
	
	public MenuPrincipal() {
		setBounds(0,0,260,350);
        setLayout(null);     
        mOpciones = new MenuOpciones(panel);
                
		add(iniciarPartida);
		add(cargarPartida);
		add(opciones);
		add(creditos);
		add(salir);
		iniciarPartida.setBounds(55,40,150,40);
		cargarPartida.setBounds(55,90,150,40);
		opciones.setBounds(55,140,150,40);
		creditos.setBounds(55,190,150,40);
		salir.setBounds(55,240,150,40);		
		
		iniciarPartida.addActionListener(this.getListenerIniciar());
		cargarPartida.addActionListener(this.getListenerCargar());
		creditos.addActionListener(this.getListenerCreditos());
		salir.addActionListener(this.getListenerSalir());
		opciones.addActionListener(this.getListenerOpciones());
	}
	
	private ActionListener getListenerIniciar() {
		return new EscuchaBotonIniciar();
	}
	
	private class EscuchaBotonIniciar implements ActionListener {
		public void actionPerformed(ActionEvent e){
			Juego juego = Controlador.getInstance().crearJuego(VentanaPrincipal.getInstance().getJugador1(), 
							VentanaPrincipal.getInstance().getJugador2(),
							VentanaPrincipal.getInstance().getAlgoPesosIniciales(),
							VentanaPrincipal.getInstance().getMapa());
			MenuJuego.create( juego , VentanaPrincipal.getInstance().getMapa());
			Estados.setEstado(Estados.MIRANDO);
			PanelComandos.create();
		}
	}

	private ActionListener getListenerCargar() {
		return new EscuchaBotonCargar();
	}
	
	private class EscuchaBotonCargar implements ActionListener {
		public void actionPerformed(ActionEvent e){
			JFileChooser fc = new JFileChooser();
        	fc.setCurrentDirectory(new File(System.getProperty("user.dir")));
        	switch(fc.showOpenDialog(MenuPrincipal.this)){
            	case JFileChooser.APPROVE_OPTION:
            	{
            		try{
                		//Cargo el juego.
            			VistaMapa vistaMapa;
            			Juego juego = Controlador.getInstance().cargarJuego(fc.getSelectedFile().toString());
                		if (juego.getMapa().getNombre().equals("Mapa 1"))
                			vistaMapa = new VistaMapa (Constantes.MAPA, juego.getMapa().getNombre());
                		else
                			vistaMapa = new VistaMapa (Constantes.MAPA2, juego.getMapa().getNombre());
                		                		 
                		MenuJuego.create( juego , vistaMapa);
                		Estados.setEstado(Estados.MIRANDO);
                		PanelComandos.create();
                	}catch(Exception ex){
                		ex.printStackTrace();
                		JOptionPane.showMessageDialog(MenuPrincipal.this, "Error al cargar Partida" + " " + ex.getMessage(), "Error", 1);
                	}
            	}
            	break;
            	case JFileChooser.CANCEL_OPTION:break;
            	case JFileChooser.ERROR_OPTION:break;                  
        	}
		}
	}
	
	private ActionListener getListenerSalir() {
		return new EscuchaBotonSalir();
	}

	private class EscuchaBotonSalir implements ActionListener
	{	public void actionPerformed(ActionEvent e)
		{
			System.exit(0);			
		}
	}
	
	public ActionListener getListenerCreditos() {
		return new EscuchaBotonCreditos();
	}
	
	private class EscuchaBotonCreditos implements ActionListener
	{	public void actionPerformed(ActionEvent e)
		{
			panel.setVisible(false);
			panel.getParent().add( new MenuCreditos( panel ));
		}
	}
	
	private ActionListener getListenerOpciones() {
		return new EscuchaBotonOpciones();
	}	
	
	private class EscuchaBotonOpciones implements ActionListener
	{	public void actionPerformed(ActionEvent e)
		{
		panel.setVisible(false); 
		panel.getParent().add(mOpciones);
		mOpciones.cargarDatos();
		mOpciones.setVisible(true);
		}
	}
	
	@Override
	protected void paintComponent(Graphics g) {
		super.paintComponent(g);
		fondo.paintComponent(g,getWidth(),getHeight());
	}
}
